package Q17_17_Multi_Search; import java.util.ArrayList; import java.util.HashMap; import CtCILibrary.HashMapList; public class QuestionB { public static void subtractValue(ArrayList<Integer> locations, int delta) { if (locations == null) return; for (int i = 0; i < locations.size(); i++) { locations.set(i, locations.get(i) - delta); } } public static Trie createTrieFromString(String s) { Trie trie = new Trie(); for (int i = 0; i < s.length(); i++) { String suffix = s.substring(i); trie.insertString(suffix, i); } return trie; } public static HashMapList<String, Integer> searchAll(String big, String[] smalls) { HashMapList<String, Integer> lookup = new HashMapList<String, Integer>(); Trie tree = createTrieFromString(big); for (String s : smalls) { /* Get terminating location of each occurrence.*/ ArrayList<Integer> locations = tree.search(s); /* Adjust to starting location. */ subtractValue(locations, s.length()); /* Insert. */ lookup.put(s, locations); } return lookup; } public static void main(String[] args) { String big = "mississippi"; String[] smalls = {"is", "ppi", "hi", "sis", "i", "mississippi"}; HashMapList<String, Integer> locations = searchAll(big, smalls); System.out.println(locations.toString()); } }